package com.own.business.question.entity.open;

import com.own.business.question.common.em.QuestionType;
import com.own.business.question.entity.bo.QuestionBo;
import com.own.business.question.entity.vo.QuestionVo;
import com.own.component.common.model.ResultModel;

import java.math.BigDecimal;
import java.util.List;

/**
 * BaseOpenQuestion
 *
 * @author chenxueli
 * @date 2021-06-18 11:36:00
 */
public interface BaseOpenQuestion {

    /**
     * 添加信息
     *
     * @param questionBoList 添加对象列表
     * @return 添加标识
     */
    ResultModel<List<QuestionVo>> addBatch(List<QuestionBo> questionBoList);

    /**
     * 根据id获取题目信息（不需要答案，并打乱顺序）
     *
     * @param questionId 题目id
     * @return 题目信息
     */
    ResultModel<QuestionVo> getByIdForAnswer(Long questionId);

    /**
     * 根据id列表获取题目列表
     *
     * @param questionIdList 题目id列表
     * @param answer         是否需要答案
     * @param shuffle        是否需要打乱
     * @return 题目列表
     */
    ResultModel<List<QuestionVo>> listByIds(List<Long> questionIdList, boolean answer, boolean shuffle);

    /**
     * 根据id列表获取题目列表
     *
     * @param questionIdList 题目id列表
     * @param answer         是否需要答案
     * @param shuffle        是否需要打乱
     * @param type           题目类型
     * @param number         题目数量
     * @return 题目列表
     */
    ResultModel<List<QuestionVo>> listByIds(List<Long> questionIdList, boolean answer, boolean shuffle, QuestionType type, int number);

    /**
     * 修改题目的可用状态
     *
     * @param pk 题目id
     * @return 修改标识
     */
    ResultModel<Boolean> updateDisabled(Long pk);

    /**
     * 题目答案比对
     *
     * @param pk     题目id
     * @param answer 答案信息
     * @return 比对结果（0-1）
     */
    ResultModel<BigDecimal> matchAnswer(Long pk, String answer);

    /**
     * 添加总数
     *
     * @param pk 题目id
     * @return 是否成功
     */
    ResultModel<Boolean> addTotal(Long pk);

    /**
     * 添加总数
     *
     * @param pkList 题目id列表
     * @return 是否成功
     */
    ResultModel<Boolean> addTotal(List<Long> pkList);

    /**
     * 根据流水id获取题目信息
     *
     * @param historyId 流水id
     * @return 题目信息
     */
    ResultModel<QuestionVo> getByHistoryId(Long historyId);

}
